package com.spzx.product.service;

import com.spzx.product.api.domain.ProductSku;
import com.spzx.product.api.domain.SkuQuery;
import com.spzx.product.api.domain.vo.SkuPriceVo;
import com.spzx.product.api.domain.vo.SkuStockVo;
import com.spzx.product.api.domain.Product;
import com.baomidou.mybatisplus.extension.service.IService;
import com.spzx.product.api.domain.ProductDetails;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 商品 服务类
 * </p>
 *
 * @author atguigu
 * @since 2024-10-26
 */
public interface ProductService extends IService<Product> {

    /**
     * 带条件的查询
     * @param product
     * @return
     */
    List<Product> getPageList(Product product);

    /**
     * 保存商品信息
     * @param product
     * @return
     */
    int saveProduct(Product product);

    /**
     * 根据id查询商品详情
     * @param id
     * @return
     */
    Product getProductById(Long id);

    /**
     * 根据id更新商品信息
     * @param product
     */
    void updateProductById(Product product);

    /**
     * 根据id删除商品信息
     * @param ids
     */
    void deleteProductByIds(List<Long> ids);

    /**
     * 根据id更新审核状态
     * @param id
     * @param auditStatus
     */
    void updateAuditStatusById(Long id, Integer auditStatus);

    /**
     * 根据商品id上下架商品
     * @param id
     * @param status
     */
    void updateStatusById(Long id, Integer status);

    /**
     * 获取畅销商品的方法
     * @return
     */
    List<ProductSku> getTopSale();

    /**
     * 带条件的查询
     * @param skuQuery
     * @return
     */
    List<ProductSku> selectProductSkuList(SkuQuery skuQuery);

    /**
     * 根据商品skuId获取SkuPriceVo
     * @param skuId
     * @return
     */
    SkuPriceVo getSkuPrice(Long skuId);

    /**
     * 根据商品id获取商品详情
     * @param id
     * @return
     */
    ProductDetails getProductDetails(Long id);

    /**
     * 根据商品id获取商品规格值
     * @param id
     * @return
     */
    Map<String, Long> getSkuSpecValue(Long id);

    /**
     * 根据商品skuId获取SkuStock
     * @param skuId
     * @return
     */
    SkuStockVo getSkuStock(Long skuId);

    List<SkuPriceVo> getSkuPriceList(List<Long> skuIdList);

    void unlock(String orderNo);

    void minus(String orderNo);
}
